অ্যাপাচি স্পার্ক (Apache Spark) একটি ডিস্ট্রিবিউটেড ডেটা প্রসেসিং সিস্টেম, যা RDD (Resilient Distributed Dataset) এর উপর ভিত্তি করে কাজ করে। RDD হলো স্পার্কের মূল ডেটা স্ট্রাকচার, যা ডিস্ট্রিবিউটেড এবং রেজিলিয়েন্ট (বিপর্যয় থেকে পুনরুদ্ধারযোগ্য)। RDD Transformations হল এমন অপারেশন যা একটি নতুন RDD তৈরি করে, কিন্তু এটি আগের RDD পরিবর্তন করে না, বরং নতুন ডেটা তৈরি করে।
এই টিউটোরিয়ালে, আমরা RDD Transformations এর মধ্যে তিনটি গুরুত্বপূর্ণ ফাংশন map, filter, এবং flatMap নিয়ে আলোচনা করব।
1. map Transformation
map একটি RDD ট্রান্সফরমেশন যা একটি ফাংশন প্রয়োগ করে প্রত্যেকটি উপাদানের উপর এবং একটি নতুন RDD তৈরি করে। এটি প্রতিটি উপাদানকে একটি নতুন মানে রূপান্তরিত করে।
map Transformation Syntax:
rdd.map(lambda x: <transformation>)
এখানে:
- rdd: এটি আপনার ইনপুট RDD।
- lambda x: : এটি একটি ফাংশন যা RDD এর প্রতিটি উপাদানকে নতুন মানে রূপান্তরিত করবে।
Example:
ধরা যাক, আমাদের কাছে একটি RDD আছে যা কিছু সংখ্যার তালিকা ধারণ করে, এবং আমরা প্রতিটি সংখ্যাকে দ্বিগুণ করতে চাই।
from pyspark import SparkContext
# SparkContext তৈরি করুন
sc = SparkContext("local", "Map Example")
# একটি নমুনা RDD তৈরি করুন
numbers = sc.parallelize([1, 2, 3, 4, 5])
# map ব্যবহার করে প্রতিটি সংখ্যা দ্বিগুণ করুন
doubled_numbers = numbers.map(lambda x: x * 2)
# ফলাফল দেখুন
print(doubled_numbers.collect())
Output:
[2, 4, 6, 8, 10]
এখানে, map ফাংশন প্রতিটি উপাদান (যেমন, 1, 2, 3) এর উপর কাজ করে এবং নতুন মান তৈরি করে (যেমন, 2, 4, 6)।
2. filter Transformation
filter একটি RDD ট্রান্সফরমেশন যা একটি শর্ত বা কন্ডিশন প্রয়োগ করে এবং কেবলমাত্র সেই উপাদানগুলো রিটার্ন করে যেগুলি সেই শর্ত পূর্ণ করে। এটি RDD থেকে কিছু উপাদান ফিল্টার করে এবং একটি নতুন RDD তৈরি করে।
filter Transformation Syntax:
rdd.filter(lambda x: <condition>)
এখানে:
- rdd: এটি ইনপুট RDD।
- lambda x: : একটি ফাংশন যা RDD এর প্রতিটি উপাদান যাচাই করে এবং সেই উপাদানগুলো নির্বাচন করে যেগুলি কন্ডিশন পূর্ণ করে।
Example:
ধরা যাক, আমাদের কাছে একটি RDD আছে যা কিছু সংখ্যার তালিকা ধারণ করে, এবং আমরা সেই সংখ্যাগুলোর মধ্যে শুধু যুগল সংখ্যা (even numbers) ফিল্টার করতে চাই।
from pyspark import SparkContext
# SparkContext তৈরি করুন
sc = SparkContext("local", "Filter Example")
# একটি নমুনা RDD তৈরি করুন
numbers = sc.parallelize([1, 2, 3, 4, 5, 6])
# filter ব্যবহার করে শুধুমাত্র even numbers বেছে নিন
even_numbers = numbers.filter(lambda x: x % 2 == 0)
# ফলাফল দেখুন
print(even_numbers.collect())
Output:
[2, 4, 6]
এখানে, filter ফাংশন কেবলমাত্র সেই উপাদানগুলো নির্বাচন করেছে যেগুলোর মান even (যুগল সংখ্যা)।
3. flatMap Transformation
flatMap একটি RDD ট্রান্সফরমেশন যা map এর মতো কাজ করে, তবে এটি প্রতিটি উপাদানকে একটি একক উপাদান বা একটি উপাদানের তালিকা (বিভিন্ন সংখ্যা) রূপান্তর করতে পারে। flatMap এমন একটি ট্রান্সফরমেশন যা নতুন RDD তৈরি করার সময় অতিরিক্ত স্তরের লিস্ট বা আরেকটি RDD "flatten" করে দেয়।
flatMap Transformation Syntax:
rdd.flatMap(lambda x: <transformation>)
এখানে:
- rdd: এটি ইনপুট RDD।
- lambda x: : একটি ফাংশন যা একটি উপাদানকে একাধিক উপাদানে রূপান্তরিত করতে পারে, যেমন একটি তালিকায়।
Example:
ধরা যাক, আমাদের কাছে একটি RDD আছে যা কিছু বাক্য ধারণ করে, এবং আমরা প্রত্যেকটি বাক্যকে পৃথক শব্দে বিভক্ত করতে চাই।
from pyspark import SparkContext
# SparkContext তৈরি করুন
sc = SparkContext("local", "flatMap Example")
# একটি নমুনা RDD তৈরি করুন
sentences = sc.parallelize(["Hello world", "Apache Spark is great"])
# flatMap ব্যবহার করে শব্দগুলো পৃথক করুন
words = sentences.flatMap(lambda x: x.split(" "))
# ফলাফল দেখুন
print(words.collect())
Output:
['Hello', 'world', 'Apache', 'Spark', 'is', 'great']
এখানে, flatMap প্রতিটি বাক্যকে পৃথক শব্দের তালিকায় রূপান্তরিত করেছে এবং পরে সমস্ত শব্দগুলো একটি একক রিডিউসড রিডাটিতে (RDD) জমা করেছে।
Comparison Between map, filter, and flatMap
| Transformation Type | Description | Example |
|---|---|---|
| map | প্রতিটি উপাদানকে নতুন উপাদানে রূপান্তরিত করে এবং একটি নতুন RDD তৈরি করে। | rdd.map(lambda x: x * 2) |
| filter | একটি শর্ত প্রয়োগ করে শুধুমাত্র সেই উপাদানগুলো নির্বাচন করে। | rdd.filter(lambda x: x % 2 == 0) |
| flatMap | প্রতিটি উপাদানকে এক বা একাধিক উপাদানে রূপান্তর করে এবং RDD গুলিকে "flatten" করে। | rdd.flatMap(lambda x: x.split(" ")) |
Conclusion
RDD Transformations (map, filter, flatMap) স্পার্কের অন্যতম শক্তিশালী বৈশিষ্ট্য যা ডিস্ট্রিবিউটেড ডেটা প্রসেসিং সহজ করে তোলে। map ব্যবহার করে আপনি
ডেটার প্রতিটি উপাদানকে নতুন মানে রূপান্তর করতে পারেন, filter ব্যবহার করে আপনি ডেটার মধ্যে নির্দিষ্ট শর্ত পূর্ণ করা উপাদানগুলো ফিল্টার করতে পারেন, এবং flatMap ব্যবহার করে আপনি ডেটার উপাদানগুলোকে একাধিক উপাদানে রূপান্তর করতে পারেন, যেমন একটি তালিকায় ভেঙে ফেলতে পারেন।
এই তিনটি রূপান্তর সলরের মধ্যে একটি শক্তিশালী পদ্ধতি হিসেবে কাজ করে, যা ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ে খুবই কার্যকরী। map, filter, এবং flatMap এর ব্যবহারে আপনি ডেটাকে আরও কার্যকরভাবে বিশ্লেষণ, প্রসেস এবং সঠিক ফলাফল পেতে পারেন।
Read more